#! /usr/bin/python
#coding: utf-8

class ClassifyingRepresentation:
    """
         Классифицируещее представление для ЕЯ-текста
     """

    def __init__(self, rm):
        """
              Конструктор класса:
                  rm - экземпляр класса MorphologicalRepresentation (морфологическое представление ЕЯ-текста)
                  text - ЕЯ-текст
          """
        self._rc = []
        self._rm = rm.get_array()
        self._build()

    def _build(self):
        """
            Строит классифицирующее представление ЕЯ-текста
        """
        add = ''
        for a in self._rm:
            unit = None
            tclass = []
            subclass = []
            mcoord = []
            #если предыдущий элемент текста необходимо присоединить к текущему
            if add:
                unit = add + ' ' + a[0]
                tclass.append('constr')
                subclass.append(0)
                add = ''
            #если отсутствуют морфологические признаки для единицы текста
            elif not a[1].pos:
                unit = a[0]
                if unit.isdigit():
                    add = unit
                elif unit in '?.,;:':
                    tclass.append('marker')
                    tclass.append(0)
                else:
                    pass

            # обработка единицы текста, которая имеет морфологические признаки
            # и не требует присоединения к предыдущему элементу
            else:
                unit = a[0]
                # перебираем каждый набор морфологических признаков
                mcoord.append(a[1])
                try:
                    tclass.append(a[1].pos)
                except:
                    pass
                try:
                    subclass.append(a[1].spart)
                except:
                    subclass.append(0)

            #if u'ЛИ' in unit:
            #    tclass = [14]
            # добавление элемента в морфологическое представление

            self._rc.append(ClassifyingRepresentationEntry(

                list(unit),
                tclass,
                subclass,
                mcoord))
        # добавление символа окончания преложения
        #else:
        #if self._text[-1] in '.?':
        #for a in self._rc:
        #    print a.tclass, a.subclass, a.unit, a.mcoord

    def get_array(self):
        """
              Возвращает массив, представляющий собой ClassifyingRepresentation
          """
        return self._rc

    def get_row(self, i):
        """
              Возвращает словарь из классифицирующего представления:
                  i - порядковый номер элемента массива
        """

        return self._rc[i]

    def get_rows_num(self):
        """
              Возвращает количество элементов массива ClassifyingRepresentation
          """
        return len(self._rc)

class ClassifyingRepresentationEntry:
    def __init__(self, unit, tclass,subclass,mcoord):
        self.unit = unit
        self.tclass = tclass
        self.subclass = subclass
        self.mcoord = mcoord